package main

import "fmt"

// 5.
// a := 1000 //non-declaration statement outside function body
var a = 1000
var b int = 2000

func main() {
	/*
		注意：
		1.变量必须先定义才能使用
		2.变量的类型和赋值类型必须一致
		3.同一个作用域内，变量名不能冲突
		4.简短定义方式，左边的变量至少有一个是新的
		5.简短定义方式，不能定义全局变量
		6.变量的零值，也叫默认值
			整型：默认值是0
			浮点类型：默认值是0
			字符串：默认值是“”
		7.变量定义了就要使用，否则无法通过编译（导入包也一样）
	*/
	var num = 100
	fmt.Printf("num的数值：%d,地址是：%p\n", num, &num)
	//num的数值：100,地址是：0xc0000a6058

	num = 200
	fmt.Printf("num的数值：%d,地址是：%p\n", num, &num)
	//num的数值：200,地址是：0xc00001c0a8

	//1.
	//fmt.Println(num2) //undefined: num2

	//2.
	var name string
	//name = 121
	//fmt.Println(name) //cannot use 121 (untyped int constant) as string value in assignment
	name = "张三"
	fmt.Println(name)

	//3.
	//var name = "卡卡"
	//fmt.Println(name)

	//4.
	//num, name := 100, "科科" //no new variables on left side of :=
	//fmt.Println(num, name)
	num, name, sex := 1000, "科科", "女"
	fmt.Println(num, name, sex)

	//6.
	fmt.Println("------------------------")
	var m int
	fmt.Println(m) //0
	var n float64
	fmt.Println(n) //0.0-->0
	var s string
	fmt.Println(s)  //""
	var s2 []int    //切片
	fmt.Println(s2) // []
	fmt.Println(s2 == nil)

	//7.
	//var x = 100 //x declared but not used
}
